package zwyarraylist;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.List;

import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

/**
 * 默认ArrayList的new是{}
 * 可以指定容量 则 Object[size]
* @ClassName: ArrayListTest 
* @Description: TODO
* @author zhaoweiyong  yyd 
* @date 2017年6月23日 下午12:11:15 *
 */
public class ArrayList01Test {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	/**
	* 测试第一个构造函数
	* public ArrayList(int initialCapacity)
	* 行号：139-145
	* @title: testConstruct 
	* @Author: zhaoweiyong
	* @Date: 2017年6月22日下午1:20:17
	 */
	@SuppressWarnings("unused")
	@Test
	public void testConstruct1() {
		//runtimeException 
		ArrayList<Object> dataList = new ArrayList<Object>(-1);
		//创建一个可以可以容纳15个对象的数据 Object[] elementData = new Object[15];
		dataList = new ArrayList<Object>(15);
	}

	/**
	* 测试第二个构造函数
	* public ArrayList()
	* 行号：150-153
	* @title: testConstruct 
	* @Author: zhaoweiyong
	* @Date: 2017年6月22日下午1:20:17
	 */
	@Test
	public void testConstruct2() {
		//Object[] elementData = {};
		ArrayList<Object> dataList = new ArrayList<Object>();
	}
	
	/**
	* 测试第三个构造函数
	* public ArrayList(Collection<? extends E> c)
	* 行号：163-169
	* @title: testConstruct 
	* @Author: zhaoweiyong
	* @Date: 2017年6月22日下午1:20:17
	 */
	@Test
	public void testConstruct3() {
		/*		
  		elementData = c.toArray(); //Collection接口的核心方法toArray, 由abstractCollection提供了模板方法的实现
        size = elementData.length; //设置size = 数据的长度
        // c.toArray might (incorrectly) not return Object[] (see 6260652)
        if (elementData.getClass() != Object[].class)
            elementData = Arrays.copyOf(elementData, size, Object[].class);
		*/		
		HashSet<String> hashSet = new HashSet<>();
		hashSet.add("hello");
		hashSet.add("world");
		hashSet.add("hello");
		//Object[] elementData = {};
		ArrayList<String> dataList = new ArrayList<>(hashSet);
		Assert.assertEquals(dataList.size(), 2);
		
		List<Integer> integerArr1 = Arrays.asList(new Integer[]{5,6,7});
		System.out.println(integerArr1.getClass());
		System.out.println(integerArr1.toArray().getClass());
		Integer[] arr = new Integer[5];
		Object[] objArr = arr;
		objArr[0] = new Object();
		//java.lang.ArrayStoreException: java.lang.Object
		System.out.println(arr.clone().getClass());
		
	
		List<Date> integerArr2 = new ArrayList<Date>();
		System.out.println(integerArr2.getClass());
		System.out.println(integerArr2.toArray().getClass());
	}
}
